const mongoose = require('./mysql/db');
const Admin = require('./mysql/collection/Admin');
const md5 = require('md5');
const uuid = require('uuid');

// 直接在数据库中创建管理员账号
async function createAdminInDB() {
  console.log('正在连接数据库并创建管理员账号...');
  
  try {
    // 等待数据库连接
    await new Promise((resolve, reject) => {
      mongoose.connection.on('connected', resolve);
      mongoose.connection.on('error', reject);
      
      // 如果已经连接，直接resolve
      if (mongoose.connection.readyState === 1) {
        resolve();
      }
    });
    
    console.log('数据库连接成功');
    
    // 检查是否已存在admin用户
    const existingAdmin = await Admin.findOne({ adminname: 'admin' });
    
    if (existingAdmin) {
      console.log('✓ 管理员账号已存在');
      console.log('管理员用户名: admin');
      console.log('管理员密码: 123456');
      return true;
    }
    
    // 创建新的管理员数据
    const adminData = {
      adminid: 'admin_' + uuid.v4(),
      adminname: 'admin',
      password: md5('123456'),
      role: 2, // 超级管理员
      roleKeys: ['ADMIN'],
      checkedKeys: [],
      menuList: [],
      permissionList: [],
      permissionBtnList: [],
      departmentName: '系统管理部'
    };
    
    // 插入管理员数据
    const newAdmin = new Admin(adminData);
    await newAdmin.save();
    
    console.log('✓ 管理员账号创建成功');
    console.log('管理员用户名: admin');
    console.log('管理员密码: 123456');
    console.log('管理员ID:', adminData.adminid);
    
    return true;
    
  } catch (error) {
    console.error('✗ 创建管理员账号失败:', error.message);
    return false;
  }
}

// 运行创建管理员
if (require.main === module) {
  createAdminInDB().then((success) => {
    if (success) {
      console.log('\n管理员账号准备完成，现在可以运行管理员接口测试了');
      process.exit(0);
    } else {
      console.log('\n管理员账号创建失败');
      process.exit(1);
    }
  }).catch(error => {
    console.error('脚本执行失败:', error);
    process.exit(1);
  });
}

module.exports = { createAdminInDB };